package Bk.basic;

public class J15_Interface {

	public static void main(String[] args) {
		// J15SungJukService sjsrv= new J15SungJukService();
		// 인터페이스는 new 연산자를 통해 객체로 만들 수 없음
		// 반드시 이것을 상속(구현)한 클래스를
		// 통해 객채로 생성할 수 있음
		J15SungJukServiceImpl sjsrv = new J15SungJukServiceImpl();
		// 성적처리에 필요한 기능 (총점, 평균, 학점) 들을 
		// 인터페이스로 분리해서 추상매서드로 정의하고
		// 그것을 구현implements 해서 클래스로 작성
		// J15SungJukService ->
		// 		-> J15SungJukServiceImp1 (구현클래스)
		
		J15SungJukVO sj = new J15SungJukVO("길동", 87, 54, 87 );
		// 값을 저장하는 클래스 선언 및 초기화
		
		sj.setTot( sjsrv.getTotal(sj) );
		sj.setAvg( sjsrv.getAverage(sj) );
		sj.setGrd( sjsrv.getGrade(sj) );
		// 총점, 평균, 학점 계산 후 
		// 각 변수에 값 저장
		
		System.out.println( sj.toString() );
	} // main

} // class

// 인터페이스 정의(~Service)
interface J15SungJukService {
	// 인터페이스가 제공할 메서드 정의
	// 메서드는 서명까지만 작성
	// 이러한 메서드를 추상메서드라 함
	
	int AAA = 12;		// 변수 x (public, static, final을 생략한)상수만 사용 가능
	
	//int getTotal ( int kor, int eng, int mat );
	int getTotal ( J15SungJukVO sj );
	double getAverage(  J15SungJukVO sj );
	char getGrade(  J15SungJukVO sj );
	
}

// 인터페이스를 구현한 클래스 작성(~Impl)
class J15SungJukServiceImpl implements J15SungJukService {

	@Override
	public int getTotal(J15SungJukVO sj) {
		int tot =  sj.getKor()	+ sj.getEng() + sj.getMat();
		return tot;
	}

	@Override
	public double getAverage(J15SungJukVO sj) {
		double avg = (double)sj.getTot() / 3;
		return avg;
	}

	@Override
	public char getGrade(J15SungJukVO sj) {
		char grd = '가';
			switch( ( int )getAverage(sj) / 10 ){ 
			case 10: case 9: grd = '수'; break;
			case 8: grd = '우'; break;
			case 7: grd = '미'; break;
			case 6: grd = '양'; break;
			default : grd = '가' ; 
			}
		return grd;
	}
	
}


class J15SungJukVO {
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
	
	public J15SungJukVO() {	}
	public J15SungJukVO(String name, int kor, int eng, int mat) {
		super();
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public int getTot() {
		return tot;
	}
	public void setTot(int tot) {
		this.tot = tot;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	public char getGrd() {
		return grd;
	}
	public void setGrd(char grd) {
		this.grd = grd;
	}
	
	
	
	@Override
	public String toString() {
		return "J15SungJukVO [name=" + name + ", kor=" + kor + ", eng=" + eng
				+ ", mat=" + mat + ", tot=" + tot + ", avg=" + avg + ", grd="
				+ grd + "]";
	}
	
	
} // class J15SungJukVO 




